package com.zs.basic.runoob

/**
 *
 * @description
 * @author madison
 * @date 2021/6/4 08:39
 *
 */

interface MyInterface {
    var name: String
    fun bar()    // 未实现
    fun foo() {  //已实现
        // 可选的方法体
        println("foo")
    }
}

class Child : MyInterface {
    override var name: String = "runnbbo"

    override fun bar() {
        println("child bar")
    }
}

//函数重写
interface A1 {
    fun foo() {
        print("A")
    }   // 已实现

    fun bar()                  // 未实现，没有方法体，是抽象的
}

interface B1 {
    fun foo() {
        print("B")
    }   // 已实现

    fun bar() {
        print("bar")
    } // 已实现
}

class C1 : A1 {
    override fun bar() {
        print("bar")
    }   // 重写
}

class D : A1, B1 {
    override fun foo() {
        super<A1>.foo()
        super<B1>.foo()
    }

    override fun bar() {
        super.bar()
    }
}

fun main() {
    val child = Child()
    child.foo()
    child.bar()
    println(child.name)

    val d = D()
    d.foo();
    d.bar();
}